home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / Tools / lynx-2.4 / WWW / Library / Implementation / HTVMS_WaisUI.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-06-28  |  20.8 KB  |  675 lines

  1. /*                            HTVMS_WAISUI.h
  2. **
  3. **    Adaptation for Lynx by F.Macrides (macrides@sci.wfeb.edu)
  4. **
  5. **    31-May-1994 FM    Initial version.
  6. */
  7.  
  8. #ifndef HTVMSWAIS_H
  9. #define HTVMSWAIS_H
  10.  
  11. #ifndef __STDLIB_LOADED
  12. #include <stdlib.h>
  13. #endif /* __STDLIB_LOADED */
  14.  
  15. #define _AP(args) ()
  16.  
  17. void    log_write _AP((char *));
  18.  
  19. /*
  20. **    Routines originally from Panic.h -- FM
  21. **
  22. **----------------------------------------------------------------------*/
  23.  
  24. void    panic _AP((char* format,...)); 
  25.  
  26. /*----------------------------------------------------------------------*/
  27.  
  28.  
  29. /*
  30. **    Routines originally from CUtil.h -- FM
  31. **
  32. **----------------------------------------------------------------------*/
  33.  
  34. /* types and constants */
  35.  
  36. #ifndef boolean
  37. #define boolean unsigned long
  38. #endif /* boolean */
  39.  
  40. #ifndef true
  41. #define true     (boolean)1L
  42. #endif /* true */
  43.  
  44. #ifndef false
  45. #define false     (boolean)0L   /* used to be (!true), but broke 
  46.                  some compilers */
  47. #endif /* false */
  48.  
  49. #ifndef TRUE
  50. #define TRUE    true
  51. #endif /* TRUE */
  52.  
  53. #ifndef FALSE
  54. #define FALSE    false
  55. #endif /* FALSE */
  56.  
  57. /*----------------------------------------------------------------------*/
  58. /* functions */
  59.  
  60. /* enhanced memory handling functions - don't call them directly, use the
  61.    macros below */
  62. void    fs_checkPtr _AP((void* ptr));
  63. void*    fs_malloc _AP((size_t size));
  64. void*    fs_realloc _AP((void* ptr,size_t size));
  65. void    fs_free _AP((void* ptr));
  66. char*     fs_strncat _AP((char* dst,char* src,size_t maxToAdd,size_t maxTotal));
  67.  
  68. /* macros for memory functions.  call these in your program.  */
  69. #define s_checkPtr(ptr)     fs_checkPtr(ptr)
  70. #define s_malloc(size)              fs_malloc(size)
  71. #define s_realloc(ptr,size)    fs_realloc((ptr),(size))
  72. #define s_free(ptr)        { fs_free((char*)ptr); ptr = NULL; }
  73. #define s_strncat(dst,src,maxToAdd,maxTotal)    fs_strncat((dst),(src),(maxToAdd),(maxTotal))
  74.  
  75. char*     s_strdup _AP((char* s));
  76.  
  77. #define IS_DELIMITER    1
  78. #define    NOT_DELIMITER    !IS_DELIMITER
  79.  
  80. char char_downcase _AP((unsigned long ch));
  81. char *string_downcase _AP((char* word));
  82.  
  83. /*----------------------------------------------------------------------*/
  84.  
  85.  
  86.  
  87. /*
  88. **    Routines originally from ZUtil.c -- FM
  89. **
  90. **----------------------------------------------------------------------*/
  91.  
  92. /* Data types / constants */
  93.  
  94. /* bytes to leave for the header size info */
  95. #define HEADER_LEN    (size_t)2 
  96.  
  97. typedef long pdu_type;
  98.  
  99. #define    initAPDU            (pdu_type)20
  100. #define    initResponseAPDU        (pdu_type)21
  101. #define    searchAPDU            (pdu_type)22
  102. #define    searchResponseAPDU        (pdu_type)23
  103. #define    presentAPDU            (pdu_type)24
  104. #define    presentResponseAPDU        (pdu_type)25
  105. #define    deteteAPDU            (pdu_type)26
  106. #define    deleteResponseAPDU        (pdu_type)27
  107. #define    accessControlAPDU        (pdu_type)28
  108. #define    accessControlResponseAPDU    (pdu_type)29
  109. #define    resourceControlAPDU        (pdu_type)30
  110. #define    resourceControlResponseAPDU    (pdu_type)31
  111.  
  112. typedef struct any {    /* an any is a non-ascii string of characters */
  113.     unsigned long    size; 
  114.     char*            bytes;
  115.     } any;
  116.     
  117. typedef any    bit_map;     /* a bit_map is a group of packed bits */
  118.  
  119. typedef unsigned long data_tag;
  120.  
  121. #define DT_PDUType            (data_tag)1     
  122. #define    DT_ReferenceID            (data_tag)2
  123. #define    DT_ProtocolVersion        (data_tag)3
  124. #define    DT_Options            (data_tag)4
  125. #define    DT_PreferredMessageSize        (data_tag)5
  126. #define    DT_MaximumRecordSize        (data_tag)6
  127. #define    DT_IDAuthentication        (data_tag)7
  128. #define    DT_ImplementationID        (data_tag)8
  129. #define    DT_ImplementationName        (data_tag)9
  130. #define    DT_ImplementationVersion    (data_tag)10
  131. #define    DT_UserInformationField        (data_tag)11
  132. #define    DT_Result            (data_tag)12
  133. #define    DT_SmallSetUpperBound        (data_tag)13
  134. #define    DT_LargeSetLowerBound        (data_tag)14
  135. #define    DT_MediumSetPresentNumber    (data_tag)15
  136. #define    DT_ReplaceIndicator        (data_tag)16
  137. #define    DT_ResultSetName        (data_tag)17
  138. #define    DT_DatabaseNames        (data_tag)18
  139. #define    DT_ElementSetNames         (data_tag)19
  140. #define    DT_QueryType            (data_tag)20
  141. #define    DT_Query            (data_tag)21
  142. #define    DT_SearchStatus            (data_tag)22
  143. #define    DT_ResultCount            (data_tag)23
  144. #define    DT_NumberOfRecordsReturned    (data_tag)24
  145. #define    DT_NextResultSetPosition    (data_tag)25
  146. #define    DT_ResultSetStatus        (data_tag)26
  147. #define    DT_PresentStatus        (data_tag)27
  148. #define    DT_DatabaseDiagnosticRecords    (data_tag)28
  149. #define    DT_NumberOfRecordsRequested    (data_tag)29
  150. #define    DT_ResultSetStartPosition    (data_tag)30
  151. #define    DT_ResultSetID            (data_tag)31
  152. #define    DT_DeleteOperation        (data_tag)32
  153. #define    DT_DeleteStatus            (data_tag)33
  154. #define    DT_NumberNotDeleted        (data_tag)34
  155. #define    DT_BulkStatuses            (data_tag)35
  156. #define    DT_DeleteMSG            (data_tag)36
  157. #define    DT_SecurityChallenge        (data_tag)37
  158. #define    DT_SecurityChallengeResponse    (data_tag)38
  159. #define    DT_SuspendedFlag        (data_tag)39
  160. #define    DT_ResourceReport        (data_tag)40
  161. #define    DT_PartialResultsAvailable    (data_tag)41
  162. #define    DT_ContinueFlag            (data_tag)42
  163. #define    DT_ResultSetWanted        (data_tag)43
  164.  
  165. #define UNUSED    -1
  166.  
  167. /* number of bytes required to represent the following sizes in compressed 
  168.    integer format
  169.  */
  170. #define CompressedInt1Byte    128         /* 2 ^ 7 */
  171. #define CompressedInt2Byte    16384         /* 2 ^ 14 */
  172. #define CompressedInt3Byte    2097152     /* 2 ^ 21 */
  173. /* others may follow ... */
  174.  
  175. /* types of query */
  176. #define QT_0    "0"    /* query whose non-standard format has been agreed upon
  177.                client and server */
  178. /* values for InitAPDU option element */
  179. #define    WILL_USE        TRUE
  180. #define WILL_NOT_USE        FALSE
  181. #define WILL_SUPPORT        TRUE
  182. #define WILL_NOT_SUPPORT    FALSE
  183.  
  184. /* values for InitResponseAPDU result element */
  185. #define ACCEPT    TRUE
  186. #define REJECT    FALSE
  187.  
  188. /* values for SearchAPDU replace indicator element */
  189. #define ON    TRUE
  190. #define OFF    FALSE
  191.  
  192. /* values for SearchResponseAPDU search status element */
  193. #define    SUCCESS    0 /* intuitive huh? */
  194. #define FAILURE    1
  195.  
  196. /* values for SearchResponseAPDU result set status element */
  197. #define    SUBSET    1
  198. #define INTERIM    2
  199. #define NONE    3
  200.  
  201. /* values for SearchResponseAPDU present status element */
  202. /* SUCCESS already defined */
  203. #define PARTIAL_1    1
  204. #define PARTIAL_2    2
  205. #define PARTIAL_3    3
  206. #define PARTIAL_4    4
  207. #define PS_NONE        5 /* can't use NONE since it was used by result 
  208.                  set status */
  209.  
  210. #define DIAGNOSTIC_CODE_SIZE    (size_t)3
  211.  
  212. typedef struct diagnosticRecord 
  213.  { boolean    SURROGATE;
  214.    char        DIAG[DIAGNOSTIC_CODE_SIZE];
  215.    char*     ADDINFO;
  216.  } diagnosticRecord;
  217.  
  218. #define D_PermanentSystemError           "S1"
  219. #define D_TemporarySystemError           "S2"
  220. #define D_UnsupportedSearch           "S3"
  221. #define D_TermsOnlyStopWords           "S5"
  222. #define D_TooManyArgumentWords           "S6"
  223. #define D_TooManyBooleanOperators      "S7"
  224. #define D_TooManyTruncatedWords           "S8"
  225. #define D_TooMany IncompleteSubfields  "S9"
  226. #define D_TruncatedWordsTooShort       "SA"
  227. #define D_InvalidFormatForRecordNumber "SB"
  228. #define D_TooManyCharactersInSearch    "SC"
  229. #define D_TooManyRecordsRetrieved      "SD"
  230. #define D_PresentRequestOutOfRange     "SF"
  231. #define D_SystemErrorInPresentRecords  "SG"
  232. #define D_RecordNotAuthorizedToBeSent  "SH"
  233. #define D_RecordExceedsPrefMessageSize "SI"
  234. #define D_RecordExceedsMaxRecordSize   "SJ"
  235. #define D_ResultSetNotSuppAsSearchTerm "SK"
  236. #define D_OnlyOneRsltSetAsSrchTermSupp "SL"
  237. #define D_OnlyANDingOfASnglRsltSetSupp "SM"
  238. #define D_RsltSetExistsNoReplace       "SN"
  239. #define D_ResultSetNamingNotSupported  "SO"
  240. #define D_CombinationDatabasesNotSupp  "SP"
  241. #define D_ElementSetNamesNotSupported  "SQ"
  242. #define D_ElementSetNameNotValid       "SR"
  243. #define D_OnlyASingleElmntSetNameSupp  "SS"
  244. #define D_ResultSetDeletedByTarget     "ST"
  245. #define D_ResultSetIsInUse             "SU"
  246. #define D_DatabasesIsLocked            "SV"
  247. #define D_TerminatedByNoContinueResp   "SW"
  248. #define D_ResultSetDoesNotExist        "SX"
  249. #define D_ResExNoResultsAvailable      "SY"
  250. #define D_ResExUnpredictableResults    "SZ"
  251. #define D_ResExValidSubsetOfResults    "T1"
  252. #define D_AccessControlFailure         "T2"
  253. #define D_SecurityNotIssuedReqTerm     "T3"
  254. #define D_SecurityNotBeIssuedRecNotInc "T4"
  255.  
  256. /*----------------------------------------------------------------------*/
  257.  
  258. /* for internal error handling */
  259.  
  260. extern char* readErrorPosition;     /* pos where buf stoped making sense */
  261.  
  262. /* the following are macros so that they can return OUT of the function
  263.    which calls them
  264.  */
  265.  
  266. #define RETURN_ON_NULL(var)                     \
  267.     if (var == NULL)                          \
  268.       return(NULL); /* jump out of caller */
  269.  
  270. #define REPORT_READ_ERROR(pos)                     \
  271.     { readErrorPosition = (pos);                \
  272.       return(NULL); /* jump out of caller */        \
  273.     }
  274.  
  275. #define CHECK_FOR_SPACE_LEFT(spaceNeeded,spaceLeft)        \
  276.     { if (*spaceLeft >= spaceNeeded)            \
  277.         (*spaceLeft) -= spaceNeeded;            \
  278.       else                            \
  279.        { *spaceLeft = 0;                     \
  280.          return(NULL); /* jump out of the caller */     \
  281.        }                            \
  282.     }
  283.  
  284. /*----------------------------------------------------------------------*/
  285.  
  286. diagnosticRecord* makeDiag _AP((boolean surrogate,char* code,char* addInfo));
  287. void freeDiag _AP((diagnosticRecord* diag));
  288. char* writeDiag _AP((diagnosticRecord* diag,char* buffer,long* len));
  289. char* readDiag _AP((diagnosticRecord** diag,char* buffer));
  290.  
  291. char* writeCompressedInteger _AP((unsigned long num,char* buf,long* len));
  292. char* readCompressedInteger _AP((unsigned long *num,char* buf));
  293. char* writeCompressedIntWithPadding _AP((unsigned long num,unsigned long size,
  294.                      char* buffer,long* len));
  295. unsigned long writtenCompressedIntSize _AP((unsigned long num));
  296.  
  297. char* writeTag _AP((data_tag tag,char* buf,long* len));
  298. char* readTag _AP((data_tag* tag,char* buf));
  299. data_tag peekTag _AP((char* buf));
  300. unsigned long writtenTagSize _AP((data_tag tag));
  301.  
  302. any* makeAny _AP((unsigned long size,char* data));
  303. void freeAny _AP((any* a));
  304. any* duplicateAny _AP((any* a));
  305. char* writeAny _AP((any* a,data_tag tag,char* buffer,long* len));
  306. char* readAny _AP((any** anAny,char* buffer));
  307. unsigned long writtenAnySize _AP((data_tag tag,any* a));
  308.  
  309. any* stringToAny _AP((char* s));
  310. char* anyToString _AP((any* a));
  311. unsigned long writtenStringSize _AP((data_tag tag,char* s));
  312.  
  313. any* longToAny _AP((long Num));
  314. long anyToLong _AP((any* a));
  315.  
  316. char* writeString _AP((char* s,data_tag tag,char* buffer,long* len));
  317. char* readString _AP((char** s,char* buffer));
  318.  
  319. bit_map* makeBitMap _AP((unsigned long numBits,...));
  320.  
  321. void freeBitMap _AP((bit_map* bm));
  322. boolean bitAtPos _AP((long pos,bit_map* bm));
  323. char* writeBitMap _AP((bit_map* bm,data_tag tag,char* buffer,long* len));
  324. char* readBitMap _AP((bit_map** bm,char* buffer));
  325.  
  326. char* writeByte _AP((unsigned long byte,char* buf,long* len));
  327. char* readByte _AP((unsigned char* byte,char* buf));
  328.  
  329. char* writeBoolean _AP((boolean flag,char* buf,long* len));
  330. char* readBoolean _AP((boolean* flag,char* buf));
  331.  
  332. char* writePDUType _AP((pdu_type pduType,char* buf,long* len));
  333. char* readPDUType _AP((pdu_type* pduType,char* buf));
  334. pdu_type peekPDUType _AP((char* buf));
  335.  
  336. char* writeBinaryInteger _AP((long num,unsigned long size,
  337.                   char* buf,long* len));
  338. char* readBinaryInteger _AP((long* num,unsigned long size,char* buf));
  339. unsigned long writtenCompressedBinIntSize _AP((long num));
  340.  
  341. char* writeNum _AP((long num,data_tag tag,char* buffer,long* len));
  342. char* readNum _AP((long* num,char* buffer));
  343. unsigned long  writtenNumSize _AP((data_tag tag,long num));
  344.  
  345. void doList _AP((void** list,void (*func)()));
  346.  
  347. char* writeProtocolVersion _AP((char* buf,long* len));
  348. char* defaultImplementationID _AP((void));
  349. char* defaultImplementationName _AP((void));
  350. char* defaultImplementationVersion _AP((void));
  351.  
  352. /*----------------------------------------------------------------------*/
  353.  
  354.  
  355. /*
  356. **    Routines originally from ZType1.c -- FM
  357. **
  358. **----------------------------------------------------------------------*/
  359.  
  360. /* This file implements the type 1 query defined in appendices B & C
  361.    of the SR 1 spec.
  362.  */
  363.  
  364. /*----------------------------------------------------------------------*/
  365. /* types and constants */
  366.  
  367. /* new data tags */
  368. #define    DT_AttributeList    (data_tag)44
  369. #define DT_Term            (data_tag)45
  370. #define DT_Operator        (data_tag)46
  371.  
  372. #define QT_BooleanQuery    "1"        /* standard boolean query */
  373.  
  374. /* general attribute code - use in place of any attribute */
  375. #define IGNORE    "ig"
  376.  
  377. /* use value codes */
  378. #define    UV_ISBN    "ub"
  379. #define    CORPORATE_NAME    "uc"
  380. #define    ISSN    "us"
  381. #define    PERSONAL_NAME    "up"
  382. #define    SUBJECT    "uj"
  383. #define    TITLE    "ut"
  384. #define    GEOGRAPHIC_NAME    "ug"
  385. #define    CODEN    "ud"
  386. #define    SUBJECT_SUBDIVISION    "ue"
  387. #define    SERIES_TITLE    "uf"
  388. #define    MICROFORM_GENERATION    "uh"
  389. #define    PLACE_OF_PUBLICATION    "ui"
  390. #define    NUC_CODE    "uk"
  391. #define    LANGUAGE    "ul"
  392. #define    COMBINATION_OF_USE_VALUES    "um"
  393. #define    SYSTEM_CONTROL_NUMBER    "un"
  394. #define    DATE    "uo"
  395. #define    LC_CONTROL_NUMBER    "ur"
  396. #define    MUSIC_PUBLISHERS_NUMBER    "uu"
  397. #define    GOVERNMENT_DOCUMENTS_NUMBER    "uv"
  398. #define    SUBJECT_CLASSIFICATION    "uw"
  399. #define    RECORD_TYPE    "uy"
  400.  
  401. /* relation value codes */
  402. #define    EQUAL    "re"
  403. #define    GREATER_THAN    "rg"
  404. #define    GREATER_THAN_OR_EQUAL    "ro"
  405. #define    LESS_THAN    "rl"
  406. #define    LESS_THAN_OR_EQUAL    "rp"
  407. #define    NOT_EQUAL    "rn"
  408.  
  409. /* position value codes */
  410. #define    FIRST_IN_FIELD    "pf"
  411. #define    FIRST_IN_SUBFIELD    "ps"
  412. #define    FIRST_IN_A_SUBFIELD    "pa"
  413. #define    FIRST_IN_NOT_A_SUBFIELD    "pt"
  414. #define    ANY_POSITION_IN_FIELD    "py"
  415.  
  416. /* structure value codes */
  417. #define    PHRASE    "sp"
  418. #define    WORD    "sw"
  419. #define    KEY    "sk"
  420. #define    WORD_LIST    "sl"
  421.  
  422. /* truncation value codes */
  423. #define    NO_TRUNCATION    "tn"
  424. #define    RIGHT_TRUNCATION    "tr"
  425. #define    PROC_NUM_INCLUDED_IN_SEARCH_ARG    "ti"
  426.  
  427. /* completeness value codes */
  428. #define    INCOMPLETE_SUBFIELD    "ci"
  429. #define    COMPLETE_SUBFIELD    "cs"
  430. #define    COMPLETEFIELD    "cf"
  431.  
  432. /* operator codes */
  433. #define AND    "a"
  434. #define OR    "o"
  435. #define AND_NOT    "n"
  436.  
  437. /* term types */
  438. #define TT_Attribute        1
  439. #define    TT_ResultSetID        2
  440. #define    TT_Operator            3
  441.  
  442. #define ATTRIBUTE_SIZE        3
  443. #define OPERATOR_SIZE        2
  444.  
  445. typedef struct query_term {
  446.   /* type */
  447.   long    TermType;
  448.   /* for term */
  449.   char    Use[ATTRIBUTE_SIZE];
  450.   char    Relation[ATTRIBUTE_SIZE];
  451.   char    Position[ATTRIBUTE_SIZE];
  452.   char    Structure[ATTRIBUTE_SIZE];
  453.   char    Truncation[ATTRIBUTE_SIZE];
  454.   char    Completeness[ATTRIBUTE_SIZE];
  455.   any*    Term;
  456.   /* for result set */
  457.   any*    ResultSetID;
  458.   /* for operator */
  459.   char    Operator[OPERATOR_SIZE];
  460. } query_term;
  461.  
  462. /*----------------------------------------------------------------------*/
  463. /* functions */
  464.  
  465. query_term* makeAttributeTerm _AP((
  466.         char* use,char* relation,char* position,char* structure,
  467.     char* truncation,char* completeness,any* term));
  468. query_term* makeResultSetTerm _AP((any* resultSet));
  469. query_term* makeOperatorTerm _AP((char* operatorCode));
  470. void freeTerm _AP((query_term* qt));
  471. char* writeQueryTerm _AP((query_term* qt,char* buffer,long* len));
  472. char* readQueryTerm _AP((query_term** qt,char* buffer));
  473. any* writeQuery _AP((query_term** terms));
  474. query_term** readQuery _AP((any* info));
  475.  
  476. /*----------------------------------------------------------------------*/
  477.  
  478.  
  479. /*
  480. **    Routines originally from UI.c -- FM
  481. **
  482. **----------------------------------------------------------------------*/
  483.  
  484. char *
  485. generate_search_apdu _AP((char* buff,  /* buffer to hold the apdu */
  486.               long *buff_len, /* number of bytes written to the buffer */
  487.               char *seed_words, /* string of the seed words */
  488.               char *database_name,
  489.               DocObj** docobjs,
  490.               long maxDocsRetrieved
  491.               ));
  492.  
  493. char *
  494. generate_retrieval_apdu _AP((char *buff, 
  495.                  long *buff_len, 
  496.                  any *docID,
  497.                  long chunk_type,
  498.                  long start_line, long end_line,
  499.                  char *type,
  500.                  char *database_name));
  501.  
  502.  
  503. long
  504. interpret_message _AP((char *request_message,
  505.                long request_length,
  506.                char *response_message,
  507.                long response_buffer_length, /* length of the buffer (modified)*/
  508.                FILE *connection,
  509.                boolean verbose));
  510.  
  511.  
  512. void
  513. display_text_record_completely _AP((WAISDocumentText *record, 
  514.                    boolean quote_string_quotes));
  515.  
  516. char *trim_junk _AP((char *headline));
  517.  
  518.  
  519.  
  520. /*
  521. **    Routines originally from ZProt.c -- FM
  522. **
  523. **----------------------------------------------------------------------*/
  524.  
  525. /* APDU types */
  526.  
  527. typedef struct InitAPDU {
  528.     pdu_type        PDUType;
  529.     boolean            willSearch,willPresent,willDelete;
  530.     boolean            supportAccessControl,supportResourceControl;
  531.     long            PreferredMessageSize;
  532.     long            MaximumRecordSize;
  533.     char*            IDAuthentication;
  534.     char*            ImplementationID;
  535.     char*             ImplementationName;
  536.     char*            ImplementationVersion;
  537.     any*            ReferenceID;
  538.     void*            UserInformationField;
  539.     } InitAPDU;
  540.  
  541. typedef struct InitResponseAPDU {
  542.     pdu_type        PDUType;
  543.     boolean            Result;
  544.     boolean            willSearch,willPresent,willDelete;
  545.     boolean            supportAccessControl,supportResourceControl;
  546.     long            PreferredMessageSize;
  547.     long             MaximumRecordSize;
  548.     char*            IDAuthentication;
  549.     char*            ImplementationID;
  550.     char*             ImplementationName;
  551.     char*            ImplementationVersion;
  552.     any*            ReferenceID;
  553.     void*            UserInformationField;
  554.     } InitResponseAPDU;
  555.  
  556. typedef struct SearchAPDU {
  557.     pdu_type        PDUType;
  558.     long             SmallSetUpperBound;
  559.     long            LargeSetLowerBound;
  560.     long             MediumSetPresentNumber;
  561.     boolean         ReplaceIndicator;
  562.     char*            ResultSetName;
  563.     char**            DatabaseNames;   
  564.     char*            QueryType;
  565.     char**            ElementSetNames;  
  566.     any*            ReferenceID;
  567.     void*            Query;
  568.     } SearchAPDU;
  569.  
  570. typedef struct SearchResponseAPDU {
  571.     pdu_type        PDUType;
  572.     long            SearchStatus;
  573.     long            ResultCount;
  574.     long            NumberOfRecordsReturned;
  575.     long             NextResultSetPosition;
  576.     long            ResultSetStatus;
  577.     long             PresentStatus;
  578.     any*            ReferenceID;
  579.     void*            DatabaseDiagnosticRecords;
  580.     } SearchResponseAPDU;
  581.  
  582. typedef struct PresentAPDU {
  583.     pdu_type        PDUType;
  584.     long            NumberOfRecordsRequested;
  585.     long            ResultSetStartPosition;
  586.     char*             ResultSetID;
  587.     char*            ElementSetNames;
  588.     any*            ReferenceID;
  589.     void*            PresentInfo;
  590.     } PresentAPDU;
  591.  
  592. typedef struct PresentResponseAPDU {
  593.     pdu_type        PDUType;
  594.     boolean            PresentStatus;
  595.     long            NumberOfRecordsReturned;
  596.     long            NextResultSetPosition;
  597.     any*            ReferenceID;
  598.     void*            DatabaseDiagnosticRecords;
  599.     } PresentResponseAPDU;
  600.  
  601. /*----------------------------------------------------------------------*/
  602. /* Functions */
  603.  
  604. InitAPDU* makeInitAPDU _AP((boolean search,boolean present,boolean deleteIt,
  605.                 boolean accessControl,boolean resourceControl,
  606.                 long prefMsgSize,long maxMsgSize,
  607.                 char* auth,char* id,char* name, char* version,
  608.                 any* refID,void* userInfo));
  609. void freeInitAPDU _AP((InitAPDU* init));
  610. char* writeInitAPDU _AP((InitAPDU* init,char* buffer,long* len));
  611. char* readInitAPDU _AP((InitAPDU** init,char* buffer));
  612.  
  613. InitResponseAPDU* makeInitResponseAPDU _AP((boolean result,
  614.                         boolean search,boolean present,boolean deleteIt,
  615.                         boolean accessControl,boolean resourceControl,
  616.                         long prefMsgSize,long maxMsgSize,
  617.                         char* auth,char* id,char* name, char* version,
  618.                         any* refID,void* userInfo));
  619. void freeInitResponseAPDU _AP((InitResponseAPDU* init));
  620. char* writeInitResponseAPDU _AP((InitResponseAPDU* init,char* buffer,long* len));
  621. char* readInitResponseAPDU _AP((InitResponseAPDU** init,char* buffer));
  622. InitResponseAPDU* replyToInitAPDU _AP((InitAPDU* init,boolean result,void* userInfo));
  623.  
  624. SearchAPDU* makeSearchAPDU _AP((long small,long large, long medium,
  625.                 boolean replace,char* name,char** databases,
  626.                 char* type,char** elements,any* refID,void* queryInfo));
  627. void freeSearchAPDU _AP((SearchAPDU* query));
  628. char* writeSearchAPDU _AP((SearchAPDU* query,char* buffer,long* len));
  629. char* readSearchAPDU _AP((SearchAPDU** query,char* buffer));
  630.  
  631. SearchResponseAPDU* makeSearchResponseAPDU _AP((long result,long count,
  632.                         long recordsReturned,long nextPos,
  633.                         long resultStatus,long presentStatus,
  634.                         any* refID,void* records));
  635. void freeSearchResponseAPDU _AP((SearchResponseAPDU* queryResponse));
  636. char* writeSearchResponseAPDU _AP((SearchResponseAPDU* queryResponse,char* buffer,long* len));
  637. char* readSearchResponseAPDU _AP((SearchResponseAPDU** queryResponse,char* buffer));
  638.  
  639. PresentAPDU* makePresentAPDU _AP((long recsReq, long startPos,
  640.                   char* resultID,any* refID,void* info));
  641. void freePresentAPDU _AP((PresentAPDU* present));
  642. char* writePresentAPDU _AP((PresentAPDU* present,char* buffer,long* len));
  643. char* readPresentAPDU _AP((PresentAPDU** present,char* buffer));
  644.  
  645. PresentResponseAPDU* makePresentResponseAPDU _AP((boolean status,long recsRet,
  646.                           long nextPos,any* refID,
  647.                           void* records));
  648. void freePresentResponseAPDU _AP((PresentResponseAPDU* present));
  649. char* writePresentResponseAPDU _AP((PresentResponseAPDU* present,char* buffer,long* len));
  650. char* readPresentResponseAPDU _AP((PresentResponseAPDU** present,char* buffer));
  651.  
  652. /*----------------------------------------------------------------------*/
  653. /* user extension hooks: */
  654.  
  655. extern char* writeInitInfo _AP((InitAPDU* init,char* buffer,long* len));
  656. extern char* readInitInfo _AP((void** info,char* buffer));
  657.  
  658. extern char* writeInitResponseInfo _AP((InitResponseAPDU* init,char* buffer,long* len));
  659. extern char* readInitResponseInfo _AP((void** info,char* buffer));
  660.  
  661. extern char* writeSearchInfo _AP((SearchAPDU* query,char* buffer,long* len));
  662. extern char* readSearchInfo _AP((void** info,char* buffer));
  663.  
  664. extern char* writeSearchResponseInfo _AP((SearchResponseAPDU* query,char* buffer,long* len));
  665. extern char* readSearchResponseInfo _AP((void** info,char* buffer));
  666.  
  667. extern char* writePresentInfo _AP((PresentAPDU* present,char* buffer,long* len));
  668. extern char* readPresentInfo _AP((void** info,char* buffer));
  669.  
  670. extern char* writePresentResponseInfo _AP((PresentResponseAPDU* present,char* buffer,long* len));
  671. extern char* readPresentResponseInfo _AP((void** info,char* buffer));
  672.  
  673.  
  674. #endif /* HTVMSWAIS_H */
  675.